import java.util.Scanner;

/**
 * @author gao
 * @date 2025/11/5 10:46
 */

public class Solution {


    boolean[] check; // 标记数组，用于标记某个数是否被使用过
    int ret;

    public int countArrangement(int n) {
        check = new boolean[n + 1];

        dfs(1, n);
        return ret;
    }

    private void dfs(int pos, int n) {
        // 递归终止条件，当pos等于n+1时，说明已经找到了一种排列方式
        if (pos == n + 1) {
            ret++;
            return;
        }

        // 遍历1到n的所有数，尝试将每个数放在pos位置
        for (int i = 1; i <= n; i++) {
            if (!check[i] && (i % pos == 0 || pos % i == 0)) {
                // 如果i没有被使用过，并且i和pos互为因子，则将i放在pos位置
                check[i] = true;
                dfs(pos + 1, n);
                // 回溯，将i从pos位置移除，并标记为未使用过
                check[i] = false;
            }
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            Solution solution = new Solution();
            System.out.println(solution.countArrangement(n));
        }
    }
}